iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Software Development

溫柔學姐的Kotlin補課/教學系列 第 7

週末雨會(一):變數的兩種狀態 val vs var

  • 分享至 

  • xImage
  •  

台灣的特殊位置,使她在夏秋之間常遭受颱風襲擊,但偶爾也會有搞錯季節的晚颱。

詩憶望著窗外灰暗的天空,狂風暴雨絲毫沒有停歇之勢。

週末其他人都不在,於是唯心提議在寢室補課,兩人都沒看天氣預報,不知道天氣會變壞。

唯心冒著風雨提著兩份外帶小火鍋。

門被推開的瞬間,食物的香味就飄滿整間寢室,詩憶嚥下口水。

「有學姐真好。」她真誠的發出感謝之詞。

唯心笑笑,將食物放下,去了一趟洗手間稍微收拾身上被雨淋濕的地方。

她回來寢室時,詩憶已經清理好桌面,也準備好兩副不鏽鋼餐筷。

小火鍋很美味,兩人在心裡感謝店家在颱風天依舊營業的勤奮,狼吞虎嚥解決了午餐。

圖1

唯心今天也是另開一個檔案放程式碼。「今天我們來玩加法吧,妳覺得會印出多少?」

fun main() {
    val x = 1
    val y = 2
    val result = x + y
    print(result)
}

這是個位數加法,一般大學生都可以心算出結果,小學生也可以用手指一個一個數出來。

詩憶自然也很快回答:「是3。」

「沒錯,妳現在試試把result加上1?」唯心把筆電還給詩憶。

詩憶想了想,加上一行程式碼。

    result = result + 1

詩憶左看看,右看看剛加上的程式碼,又回頭看看學姐。

「妳是不是覺得很想把兩邊的result一起拿掉?」唯心一口道破她的想法。「這是國高中方程式求解帶來的習慣,在程式碼裡,等號只有一個的時候,不是數學的相等,而是賦予新價值的動作——令新的result是原本result的值加一。」

詩憶放心了,點擊綠色三角形跑程式,結果出現紅字錯誤。「咦?」她又試了幾次,還是一樣的結果。

圖2

「因為result現在是val的狀態啊,不能重新賦予價值。錯誤訊息也是這樣說的。」

「那要怎麼改?」聽了唯心的話,詩憶沮喪地垂下肩膀。

唯心沒有開口回答,但她把游標移動到發生錯誤的那行程式碼,讓IDE浮出了提示框。

圖3

詩憶照著IDE提示框的建議,把val改成了var

fun main() {
    val x = 1
    val y = 2
    var result = x + y
    result = result + 1
    print(result)
}

圖4

程式這次順利跑出4的結果。

唯心拍拍詩憶的肩膀。「做得好,如果需要重新賦值,就使用var,反之就是val。刻意分成兩種賦值待遇,是因為不能重寫,就代表始終如一。在程式邏輯上有時會利用到這個特性,比如考卷交出去再拿回來修改就是不合理的。IDE時刻檢查程式碼的語法和合理性,有錯誤就會像這樣在行下面顯示紅色鋸齒線,不用等妳按綠色三角形跑程式才發現問題。」

詩憶點頭表示了解。

「對了,有個地方要注意,即使var可以重新賦值,也不是沒有限制的唷。」程式碼在唯心的改動下再次出現紅色鋸齒底線。

圖5

「是因為剛剛是數字,現在是文字嗎?」詩憶猜測。

唯心點頭。「是的。在程式中不同型態的變數在記憶體分配的方式不同,強硬的將變數改變型態會發生問題。」


上一篇
晚上的空教室補課:名字賦予存在之變數 Variable
下一篇
週末雨會(二):變數基本型態 Basic Types
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言